﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL_MechSysWeb;
using DTO_MechSysWeb;
using System.Web.Security;
using System.Data;

namespace WEB_MechSysWeb.Paginas_Administrador
{
    public partial class NoticiaCadastro : System.Web.UI.Page
    {

        BLLNoticia bllNoticia = new BLLNoticia();
        DTONoticia dtoNoticia = new DTONoticia();
        BLLCliente bllCliente = new BLLCliente();
        BLLVeiculo bllVeiculo = new BLLVeiculo();
        BLLAgendamento bllAgendamento = new BLLAgendamento();   
        MembershipUser memberShipUser;
        static int clienteID, noticiaID, indiceLstbox;
        static string userID, ImgTipo;
        static byte[] ImgDados;
        static List<DTOCliente> lstClienteNomes = new List<DTOCliente>();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Habilitar(false);
                PreecherDados();
            }

            try
            {
                memberShipUser = Membership.GetUser(User.Identity.Name);
                if (memberShipUser != null)
                {
                    if (Roles.IsUserInRole("Administrador"))
                    {
                        userID = memberShipUser.ProviderUserKey.ToString();
                    }
                    if (Roles.IsUserInRole("Cliente"))
                    {

                        Response.Redirect("~/Paginas_Logado/ClientePerfil.aspx");
                    }
                }
                else
                {
                    Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
                }
            }
            catch (Exception)
            {
                Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
            }
        }

        public void PreecherDados()
        {
            try
            {
                ListarDados("");

                gridSelecioneCliente.DataSource = PopulaGridClientes();
                gridSelecioneCliente.DataBind();
            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar dados!");
            }
        }

        protected void ListarDados(string tipo)
        {
            int tamanhoPagina = 10;
            int registroInicio = 0;

            if (ViewState["registroInicio"] != null)
                registroInicio = (int)ViewState["registroInicio"];

            if (tipo == "proximo")
                registroInicio += tamanhoPagina;
            else if (tipo == "anterior")
                registroInicio -= tamanhoPagina;

            if (registroInicio < 0)
                registroInicio = 0;

            List<DTONoticia> lstNoticias = bllNoticia.BuscarNoticiasCadastradas(registroInicio, tamanhoPagina, tipo);
            gridNoticias.DataSource = PopulaGridNoticias(lstNoticias);
            gridNoticias.DataBind();

            ViewState.Add("registroInicio", registroInicio);
        }

        protected void ListarDadosPesquisa(string tipo, DateTime data)
        {
            int tamanhoPagina = 10;
            int registroInicio = 0;

            if (ViewState["registroInicio"] != null)
                registroInicio = (int)ViewState["registroInicio"];

            if (tipo == "proximo")
                registroInicio += tamanhoPagina;
            else if (tipo == "anterior")
                registroInicio -= tamanhoPagina;

            if (registroInicio < 0)
                registroInicio = 0;

            List<DTONoticia> lstNoticias = bllNoticia.BuscarNoticiasPorData(registroInicio, tamanhoPagina, tipo, data);
            gridNoticias.DataSource = PopulaGridNoticias(lstNoticias);
            gridNoticias.DataBind();

            ViewState.Add("registroInicio", registroInicio);
        }

        public DataTable PopulaGridNoticias(List<DTONoticia> lstNoticias)
        {
            DataTable dataTableGridView = new DataTable();
            DataRow dataRow;

            try
            {
                if (lstNoticias.Count > 0)
                {
                    dataTableGridView.Columns.Add("NoticiaID", typeof(string));
                    dataTableGridView.Columns.Add("Titulo", typeof(string));
                    dataTableGridView.Columns.Add("DataInicio", typeof(string));
                    dataTableGridView.Columns.Add("DataFinal", typeof(string));
                    dataTableGridView.Columns.Add("DataRegistro", typeof(string));
                    dataTableGridView.Columns.Add("ClienteEspecifico", typeof(string));

                    foreach (DTONoticia dtoNoticia in lstNoticias)
                    {
                        dataRow = dataTableGridView.NewRow();


                        dataRow["NoticiaID"] = dtoNoticia.NoticiaID.ToString();
                        dataRow["Titulo"] = dtoNoticia.Titulo.ToString();
                        dataRow["DataInicio"] = string.Format("{0:d}", dtoNoticia.DataInicio);
                        if (dtoNoticia.AtribuiVencimento)
                        {
                            dataRow["DataFinal"] = string.Format("{0:d}", dtoNoticia.DataFinal);
                        }
                        else
                        {
                            dataRow["DataFinal"] = "Indefinida";
                        }
                        dataRow["DataRegistro"] = string.Format("{0:d}", dtoNoticia.DataRegistro);
                        if (dtoNoticia.ClienteEspecifico)
                        {
                            dataRow["ClienteEspecifico"] = "Sim";
                        }
                        else
                        {
                            dataRow["ClienteEspecifico"] = "Não";
                        }

                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar os dados para o grid!");
            }

            return dataTableGridView;
        }

        public DataTable PopulaGridClientes()
        {
            List<DTOCliente> listClientes = new List<DTOCliente>();
            DataTable dataTableGridView = new DataTable();
            DataRow dataRow;

            listClientes = bllCliente.BuscarClientesCadastradosWeb();
            try
            {
                if (listClientes.Count > 0)
                {
                    dataTableGridView.Columns.Add("ClienteID", typeof(string));
                    dataTableGridView.Columns.Add("Nome", typeof(string));
                    dataTableGridView.Columns.Add("Veiculo", typeof(string));
                    dataTableGridView.Columns.Add("Placa", typeof(string));
                    dataTableGridView.Columns.Add("Contato", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("AgendamentoPendente", typeof(string));

                    foreach (DTOCliente dtoCliente in listClientes)
                    {
                        dataRow = dataTableGridView.NewRow();


                        dataRow["ClienteID"] = dtoCliente.ClienteID;
                        dataRow["Nome"] = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                        List<DTOVeiculo> listVeiculos = bllVeiculo.BuscarVeiculosPorClienteID(dtoCliente.ClienteID);
                        dataRow["Veiculo"] = string.Format("{0} {1}", listVeiculos[0].Marca, listVeiculos[0].Modelo);
                        dataRow["Placa"] = listVeiculos[0].Placa;
                        dataRow["Contato"] = string.Format("{0} {1}", dtoCliente.Telefone, dtoCliente.Celular);
                        dataRow["Email"] = dtoCliente.Email;
                        dataRow["AgendamentoPendente"] = bllAgendamento.BuscarNumAgendamentosPendentes(dtoCliente.ClienteID);


                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar os dados para o grid!");
            }

            return dataTableGridView;
        }

        public void Habilitar(bool status)
        {
            txtTitulo.Enabled = status;
            txtResumo.Enabled = status;
            txtTexto.Enabled = status;
            chkEspecificaCliente.Enabled = status;
            chkDefinePeriodo.Enabled = status;
            txtDataInicial.Enabled = status;
            AsyncFileUpImagens.Enabled = !status;

            btnNovo.Enabled = !status;
            btnEditar.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;
            btnExcluir.Enabled = status;

            if (status == true)
            {
                btnNovo.ForeColor = System.Drawing.Color.Black;
                btnEditar.ForeColor = System.Drawing.Color.Black;
                btnCancelar.ForeColor = System.Drawing.Color.White;
                btnSalvar.ForeColor = System.Drawing.Color.White;
                btnExcluir.ForeColor = System.Drawing.Color.White;
                txtDataInicial.Text = DateTime.Now.ToShortDateString();
            }
            if (status == false)
            {
                btnNovo.ForeColor = System.Drawing.Color.White;
                btnEditar.ForeColor = System.Drawing.Color.White;
                btnCancelar.ForeColor = System.Drawing.Color.Black;
                btnSalvar.ForeColor = System.Drawing.Color.Black;
                btnExcluir.ForeColor = System.Drawing.Color.Black;
                txtDataInicial.Text = string.Empty;
            }

        }

        public void LimparCampos()
        {
            clienteID = 0;
            noticiaID = 0;
            userID = "";
            txtTitulo.Text = string.Empty;
            txtResumo.Text = string.Empty;
            txtTexto.Text = string.Empty;
            chkEspecificaCliente.Checked = false;
            chkDefinePeriodo.Checked = false;
            lstboxCliente.Items.Clear();
            txtDataInicial.Text = string.Empty;
            txtDataFinal.Text = string.Empty;
        }

        protected void imgbtnPesquisar_Click(object sender, ImageClickEventArgs e)
        {
            if (!string.IsNullOrEmpty(txtDataFiltro.Text))
            {
                try
                {
                    DateTime data = Convert.ToDateTime(txtDataFiltro.Text);
                    ListarDadosPesquisa("", data);
                }
                catch (Exception)
                {
                    Mensagem.ExibirEmUP("Informe uma data válida para pesquisar!");
                }

            }
        }

        protected void lnkbtnAnterior_Click(object sender, EventArgs e)
        {
            ListarDados("anterior");
        }

        protected void lnkbtnProximo_Click(object sender, EventArgs e)
        {
            ListarDados("proximo");
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            LimparCampos();
            Habilitar(true);
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            if (noticiaID != 0)
            {
                Habilitar(true);
            }
            else
            {
                Mensagem.ExibirEmUP("Selecione uma notícia para editar!");
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            LimparCampos();
            Habilitar(false);
        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(noticiaID.ToString()))
            {
                try
                {
                    bllNoticia.Excluir(noticiaID);
                    Mensagem.ExibirEmUP("Notícia excluída com sucesso!");
                    LimparCampos();
                    Habilitar(false);
                    PreecherDados();

                }
                catch
                {
                    Mensagem.ExibirEmUP("Não foi possível excluir a Notícia!");
                }
            }
            else
            {
                Mensagem.ExibirEmUP("Selecione uma Notícia para excluir!");
            }
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            if (noticiaID == 0)
            {
                string clientesID = "";
                try
                {
                    dtoNoticia.Titulo = txtTitulo.Text;
                    dtoNoticia.Resumo = txtResumo.Text;
                    dtoNoticia.Texto = txtTexto.Text;
                    dtoNoticia.ClienteEspecifico = chkEspecificaCliente.Checked;
                    if (dtoNoticia.ClienteEspecifico && lstboxCliente.Items.Count > 0)
                    {
                        foreach (ListItem item in lstboxCliente.Items)
                        {
                            clientesID += item.Value + ',';
                        }
                    }
                    dtoNoticia.ClienteID = clientesID;
                    dtoNoticia.DataInicio = Convert.ToDateTime(txtDataInicial.Text);
                    dtoNoticia.AtribuiVencimento = chkDefinePeriodo.Checked;
                    if (dtoNoticia.AtribuiVencimento)
                    {
                        dtoNoticia.DataFinal = Convert.ToDateTime(txtDataFinal.Text);
                    }
                    else
                    {
                        dtoNoticia.DataFinal = Convert.ToDateTime("01/01/1800");
                    }
                    dtoNoticia.Imagem = ImgDados;
                    dtoNoticia.ImagemTipo = ImgTipo;

                    bllNoticia.Inserir(dtoNoticia);

                    Mensagem.ExibirEmUP("Notícia cadastrada com sucesso!");
                    LimparCampos();
                    Habilitar(false);
                    PreecherDados();
                }
                catch
                {
                    Mensagem.ExibirEmUP("Não foi possível cadastrar Notícia!");
                }
            }
            else
            {
                Atualizar();
            }
        }

        public void Atualizar()
        {
           string clientesID = "";
            try
            {
                dtoNoticia.NoticiaID = noticiaID;
                dtoNoticia.Titulo = txtTitulo.Text;
                dtoNoticia.Resumo = txtResumo.Text;
                dtoNoticia.Texto = txtTexto.Text;
                dtoNoticia.ClienteEspecifico = chkEspecificaCliente.Checked;
                if (dtoNoticia.ClienteEspecifico && lstboxCliente.Items.Count > 0)
                {
                    foreach (ListItem item in lstboxCliente.Items)
                    {
                        clientesID += item.Value + ',';
                    }
                }
                dtoNoticia.ClienteID = clientesID;
                dtoNoticia.DataInicio = Convert.ToDateTime(txtDataInicial.Text);
                dtoNoticia.AtribuiVencimento = chkDefinePeriodo.Checked;
                if (dtoNoticia.AtribuiVencimento)
                {
                    dtoNoticia.DataFinal = Convert.ToDateTime(txtDataFinal.Text);
                }
                else
                {
                    dtoNoticia.DataFinal = Convert.ToDateTime("01/01/1800");
                }
                dtoNoticia.Imagem = ImgDados;
                dtoNoticia.ImagemTipo = ImgTipo;

                bllNoticia.Atualizar(dtoNoticia);
        
                Mensagem.ExibirEmUP("Notícia atualizada com sucesso!");
                LimparCampos();
                Habilitar(false);
                PreecherDados();
            }
            catch
            {
                Mensagem.ExibirEmUP("Não foi possível atualizar Notícia!");
            }
        }

        protected void chkEspecificaCliente_CheckedChanged(object sender, EventArgs e)
        {
            bool status = chkEspecificaCliente.Checked;

            lstboxCliente.Enabled = status;
            btnSelecionaCliente.Enabled = status;
            btnRemoverCliente.Enabled = status;

            if (status == true)
            {
                btnSelecionaCliente.ForeColor = System.Drawing.Color.White;
                btnRemoverCliente.ForeColor = System.Drawing.Color.White;
            }
            if (status == false)
            {
                btnSelecionaCliente.ForeColor = System.Drawing.Color.Black;
                btnRemoverCliente.ForeColor = System.Drawing.Color.Black;
                lstboxCliente.Items.Clear();
            }
        }

        protected void chkDefinePeriodo_CheckedChanged(object sender, EventArgs e)
        {
            bool status = chkDefinePeriodo.Checked;

            txtDataFinal.Enabled = status;
        }

        protected void AsyncFileUpImagens_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            try
            {
                if ((AsyncFileUpImagens.PostedFile != null && !string.IsNullOrEmpty(AsyncFileUpImagens.PostedFile.FileName) && BLLUtilidades.ValidarExtensaoImagem(AsyncFileUpImagens.PostedFile.FileName)))
                {
                    ImgDados = new byte[AsyncFileUpImagens.PostedFile.ContentLength];
                    HttpPostedFile Imagem = AsyncFileUpImagens.PostedFile;
                    ImgTipo = AsyncFileUpImagens.PostedFile.ContentType.ToString();
                    Imagem.InputStream.Read(ImgDados, 0, (int)AsyncFileUpImagens.PostedFile.ContentLength);
                }
                else
                {
                    Mensagem.ExibirEmUP("Arquivo de imagem inválido!");
                }
            }
            catch (Exception)
            { }
        }

        protected void gridNoticias_SelectedIndexChanged(object sender, EventArgs e)
        {            
            noticiaID = Convert.ToInt32(gridNoticias.SelectedValue.ToString());
            dtoNoticia = bllNoticia.BuscarNoticiaPorNoticiaID(noticiaID);
            txtTitulo.Text = dtoNoticia.Titulo;
            txtResumo.Text = dtoNoticia.Resumo;
            txtTexto.Text = dtoNoticia.Texto;
            chkEspecificaCliente.Checked = dtoNoticia.ClienteEspecifico;
            bool status = chkEspecificaCliente.Checked;
            lstboxCliente.Enabled = status;
            btnSelecionaCliente.Enabled = status;
            btnRemoverCliente.Enabled = status;
            if (dtoNoticia.ClienteEspecifico)
            {
                btnSelecionaCliente.ForeColor = System.Drawing.Color.White;

                DTOCliente dtoCliente = null;
                string clientes = dtoNoticia.ClienteID;
                string[] arrClientes = clientes.Split(',');

                for (int i = 0; i < arrClientes.Length; i++)
                {
                    if (arrClientes[i] != "")
                    {
                        dtoCliente = bllCliente.BuscarClientePorClienteID(Convert.ToInt32(arrClientes[i]));
                        dtoCliente.Nome = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                        dtoCliente.ClienteID = dtoCliente.ClienteID;
                        lstClienteNomes.Add(dtoCliente);
                    }
                }
                lstboxCliente.Items.Clear();
                lstboxCliente.DataSource = lstClienteNomes;
                lstboxCliente.DataTextField = "Nome";
                lstboxCliente.DataValueField = "ClienteID";
                lstboxCliente.DataBind();
            }
            else
            {
                btnSelecionaCliente.ForeColor = System.Drawing.Color.Black;
            }
            txtDataInicial.Text = dtoNoticia.DataInicio.ToShortDateString();
            chkDefinePeriodo.Checked = dtoNoticia.AtribuiVencimento;
            if (dtoNoticia.AtribuiVencimento)
            {
                txtDataFinal.Text = dtoNoticia.DataFinal.ToShortDateString();
            }
            ImgDados = dtoNoticia.Imagem;
            ImgTipo = dtoNoticia.ImagemTipo;

            btnExcluir.Enabled = true;
            btnExcluir.ForeColor = System.Drawing.Color.White;

        }

        protected void gridSelecioneCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            clienteID = Convert.ToInt32(gridSelecioneCliente.SelectedValue.ToString());
            DTOCliente dtoCliente = bllCliente.BuscarClientePorClienteID(clienteID);
            DTOCliente dtoClienteSelecionado = new DTOCliente();

            if (lstboxCliente.Items.Count > 0)
            {
                bool Existe = false;
                foreach (ListItem item in lstboxCliente.Items)
                {
                    if (item.Value.Contains(dtoCliente.ClienteID.ToString()))
                    {
                        Mensagem.ExibirEmUP("O cliente selecionado já está na lista!");
                        Existe = true;
                        break;
                    }

                }
                if (Existe == false)
                {
                    dtoClienteSelecionado.Nome = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                    dtoClienteSelecionado.ClienteID = dtoCliente.ClienteID;
                    lstClienteNomes.Add(dtoClienteSelecionado);
                }
            }
            else
            {
                dtoClienteSelecionado.Nome = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                dtoClienteSelecionado.ClienteID = dtoCliente.ClienteID;
                lstClienteNomes.Add(dtoClienteSelecionado);
            }

            lstboxCliente.Items.Clear();
            lstboxCliente.DataSource = lstClienteNomes;
            lstboxCliente.DataTextField = "Nome";
            lstboxCliente.DataValueField = "ClienteID";
            lstboxCliente.DataBind();

        }

        protected void lstboxCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnRemoverCliente.Enabled = true;
            btnRemoverCliente.ForeColor = System.Drawing.Color.White;
            indiceLstbox = lstboxCliente.SelectedIndex;
        }

        protected void btnRemoverCliente_Click(object sender, EventArgs e)
        {
            lstClienteNomes.RemoveAt(indiceLstbox);

            lstboxCliente.Items.Clear();
            lstboxCliente.DataSource = lstClienteNomes;
            lstboxCliente.DataTextField = "Nome";
            lstboxCliente.DataValueField = "ClienteID";
            lstboxCliente.DataBind();
        }



    }
}